package com.fw.render;

import java.io.IOException;

import com.fw.core.Fw;
import com.fw.exception.RenderException;

public class RedirectRender extends Render {

	private static final long serialVersionUID = 1812102713097864255L;
	private String url;
	private boolean withQueryString;
	private static final String contextPath = getContxtPath();

	static String getContxtPath() {
		String cp = Fw.me().getContextPath();
		return ("".equals(cp) || "/".equals(cp)) ? null : cp;
	}

	public RedirectRender(String url) {
		this.url = url;
		this.withQueryString = false;
	}

	public RedirectRender(String url, boolean withQueryString) {
		this.url = url;
		this.withQueryString = withQueryString;
	}

	public void render() {
		if (contextPath != null && url.indexOf("://") == -1) {
			url = contextPath + url;
		}

		if (withQueryString) {
			String queryString = request.getQueryString();
			if (queryString != null) {
				if (url.indexOf("?") == -1) {
					url = url + "?" + queryString;
				} else {
					url = url + "&" + queryString;
				}
			}
		}

		try {
			response.sendRedirect(url); // always 302
		} catch (IOException e) {
			throw new RenderException(e);
		}
	}
}
